package cn.wolfcode.trip.base.service;

import cn.wolfcode.trip.base.domain.User;
import cn.wolfcode.trip.base.query.QueryObject;
import com.github.pagehelper.PageInfo;

import java.util.Map;

public interface IUserService {
    /**
     * 用户注册
     *
     * @param u
     * @return
     */
    void regist(User u);

    /**
     * 用户登录
     *
     * @param email
     * @param password
     * @return
     */
    void saveOrUpdate(User u);

    User login(String email, String password);

    PageInfo<User> query(QueryObject qo);

    /*==========================================*/

    /**
     * 查询当前用户id的相关信息
     *
     * @param id
     * @return
     */
    User getByUserId(Long id);

    /**
     * 查询当前用户id和目标id有没有存在关注关系
     *
     * @param currentId
     * @param targetId
     * @return
     */
    Map<String, Object> getCurrentIdByTargetId(Long currentId, Long targetId);

    /**
     * 保存当前用户和目标用户的关注关系
     *
     * @param currentId
     * @param targetId
     */
    void save(Long currentId, Long targetId);

    /**
     * 删除当前用户和目标用户的关注关系
     *
     * @param currentId
     * @param targetId
     */
    void delete(Long currentId, Long targetId);


    /**
     * 当保存关注的时候要增加被关注人的粉丝数量
     *
     * @param targetId
     */
    int updateFansNum(Long targetId);

    /**
     * 当保存关注的时候要增加关注人的关注数量
     *
     * @param targetId
     */
    void updateFollowNum(Long currentId);

    /**
     * 当删除关注的时候要减少被关注人的粉丝数量
     *
     * @param targetId
     */
    int removeFansNum(Long targetId);

    /**
     * 当删除关注的时候要减少关注人的关注数量
     *
     * @param targetId
     */
    void removeFollowNum(Long currentId);

    /**
     * 获取用户积分
     * @param id 用户id
     * @return 用户对象
     */
    User getUserScore(Long id);

}
